package com.rabbit.service;

import com.github.pagehelper.PageInfo;
import com.rabbit.exception.BusinessException;
import com.rabbit.vo.req.DictReq;
import com.rabbit.vo.res.DictDataRes;
import com.rabbit.vo.res.DictRes;

import java.util.List;

/**
 * <h1>字典管理业务接口</h1>
 *
 * @author zjw
 * @date 2022/1/20 13:34
 */
public interface DictService {

    /**
     * 查询指定字典
     *
     * @return List<DictDataRes>
     */
    List<DictDataRes> queryDictData();

    /**
     * 列表查询
     *
     * @param dictReq 查询条件
     * @return PageInfo 分页对象
     */
    PageInfo<DictRes> queryDictList(DictReq dictReq);

    /**
     * 删除字典
     *
     * @param dictReq 字典信息
     */
    void deleteDict(DictReq dictReq);

    /**
     * 修改字典状态
     *
     * @param dictReq 字典信息
     */
    void updateDictEnabled(DictReq dictReq);

    /**
     * 根据字典编号查询字典信息
     *
     * @param dictId 字典编号
     * @return DictRes 字典信息
     */
    DictRes queryDictById(Long dictId);

    /**
     * 添加/更新时 数据校验
     *
     * @param dictReq  字典添加/更新数据封装
     * @param operType 操作类型 1新增 2修改
     * @throws BusinessException 业务异常
     */
    void checkUnique(DictReq dictReq, int operType) throws BusinessException;

    /**
     * 添加字典
     *
     * @param dictReq 字典信息
     */
    void addDict(DictReq dictReq);

    /**
     * 更新字典
     *
     * @param dictReq 字典信息
     */
    void updateDict(DictReq dictReq);

    /**
     * 查询所有可用的字典
     *
     * @return List<DictRes>
     */
    List<DictRes> queryAllDict();
}
